Site cover image

Site icon imageSen(Qian)’s Memo

This website is Donglin Qian (Torin Sen)’s memo, especially about machine learning papers and competitive programming.

Distribution Shiftの基礎

教科書ではないけど、いくつかのスライドで勉強する。

英語のPDFのスライド

日本語のPDFの解説

Distribution Shiftとは

ずばり、訓練データの分布とテストデータの分布が違うということ。

ptr(x,y)pte(x,y)p_{tr}(\mathbf{x}, y) \neq p_{te}(\mathbf{x}, y)

以下のような細分ができる。

Image in a image block

それぞれの例を挙げてみる。

  • Covariance Shift TrainとTestの間のサンプルの分布が違うが、ラベルの分布が同じ。白黒画像とカラー画像の例。
  • Label Shift  ラベルの分布が違う場合。同じサンプル分布でもラベル付けの方法が変わった場合。
  • Output Noise  TrainとTestの間で、各サンプルについての出力結果が変わる問題。 ノイズが入るとか。
  • Class-conditional Shift  同じラベルの持つデータの分布が異なる。

Joint Shift + Label Shiftなどのように複数兼ね持つ場合がある。

Covariance Shift Adaptation

Covariance Shiftを持つが、Output Noiseは持たないもの。

ptr(x)pte(x)ptr(yx)=pte(yx)p_{tr}(\mathbf{x}) \neq p_{te}(\mathbf{x}) \\ p_{tr}(y | \mathbf{x}) = p_{te}(y | \mathbf{x})

車の写真を見せれば正解は車、猫の写真を見せれば正解は猫でそのままであるが、訓練データがモノクロでテストデータがカラーである場合など。

解決法としては、Importance-Weighted Trainingである。普通の訓練は左、改善後は右。

Image in a image block

左はptr(xtr)/ptr(xtr)=1p_{tr}(\mathbf{x}^{tr}) / p_{tr}(\mathbf{x}^{tr}) = 1であるとみなせば、右は分子をptr(xtr)pte(xtr)p_{tr}(\mathbf{x}^{tr}) \to p_{te}(\mathbf{x}^{tr})のように変えている。

分子だけで十分では?と思えてくるけど左は何もない1である以上、比率で計算するべきである。

これを利用して、ptep_{te}からサンプリングが難しいとき、密度比がわかればptrp_{tr}がわかるなら逆算ができるという手法である。

では、どのようにImportance=密度比を推定するのか?

Kernel Mean Matching

ここで、r(x)=pte(x)/ptr(x)r(\mathbf{x}) = p_{te}(\mathbf{x}) / p_{tr}(\mathbf{x})とする。pte(x)p_{te}(\mathbf{x})r(x)ptr(x)r(\mathbf{x}) p_{tr}(\mathbf{x})の分布を一致させたい。

具体的には以下のようなものである。

minrEtr[xr(x)]Ete[x]2\min _r || \mathbb{E}_{tr}[\mathbf{x} r(\mathbf{x})] - \mathbb{E}_{te}[\mathbf{x}] ||^2

これだけでは不十分である。N次の積率=モーメントはE[XN]\mathbb{E}[X^N]であり、無限次元まで考えてすべてを考えて一致させないと分布は一致しない。

一次モーメントは平均、二次モーメントは分散、三次モーメントは歪度、四次モーメントは尖度。

すべての次元を捉えるため、exp\expはテイラー展開すると無限次元展開できることを利用して、ガウシアンカーネルを使えばよい。これは再生核ヒルベルト空間H\mathcal{H}を定義してそれを使えばいい。カーネル関数はガウシアンカーネルを使う。

ここでの再生核ヒルベルト空間は1引数をとる関数の間の内積を定義している空間であり、その内積の計算方法がガウシアンカーネルである。

minrEtr[K(x,)r(x)]Ete[K(x,)]H2\min _{r} || \mathbb{E}_{tr}[K(\mathbf{x}, \cdot) r(\mathbf{x})] - \mathbb{E}_{te}[K(\mathbf{x}, \cdot)] ||^2 _\mathcal{H}

Least-squares Importance Fitting(LSIF)

以下のように最小二乗法で推定する。

arg minrEtr[(r(x)pte(x)ptr(x))2]=arg minrEtr[r(x)2]2Ete[r(x)]\argmin _{r} \mathbb{E}_{tr} [(r(\mathbf{x}) - \frac{p_{te}(\mathbf{x})}{p_{tr}(\mathbf{x})}) ^ 2] \\ = \argmin _{r} \mathbb{E}_{tr}[r(\mathbf{x})^2] - 2 \mathbb{E}_{te}[r(\mathbf{x})]

これは、Bergman Divergenceに拡張することもできる。

Bergman Divergenceとは以下のように2点p,qp, qの距離を測る手法である。ϕ\phiは凸関数。このDivergenceは交換則が成り立たず、一般的なDivergenceの一般化である

Dϕ(pq)=ϕ(p)ϕ(q)ϕ(q),pqD_\phi(p || q) = \phi(p) - \phi(q) - \langle \nabla \phi(q), p - q \rangle

つまり、二乗誤差を任意のDivergenceに置き換えてもいい。

Class priorの推定の二段階アルゴリズム

  1. まずは上記の手法のように、r(x)r(\mathbf{x})を推測させる。
  2. r(x)r(\mathbf{x})を用いて、上のImportance Weightingの式で最小化を行い、識別器を得る。

継続的なシフト

Test Domainが訓練するたびに変わってしまう状態について考える。

Image in a image block
Image in a image block

与えられるのは大量のラベル付けされた訓練データと、各TestでのDomainを代表する少量のUnlabaledデータ。

この問題設定では、各Test Domainに対してRetrainingが必要である。毎回やるのは効率が悪いので、Online Learningという手法を使う。

k_vol30-no5/

Online Convex Optimizationをする。凸関数の損失llがあり、線形モデルf(x)=wTxf(\mathbf{x}) = \mathbf{w ^ T x}を考える。以下の式のように勾配法で更新するが、そのまま更新するのではなく、ある写像ΠW\Pi _{\mathcal{W}}を挟んでいる。

Image in a image block

ATLAS